package com.continautos.common.persistence.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import com.continautos.common.persistence.DAOFactory;
import com.continautos.common.persistence.dao.ConsultasDao;
import com.continautos.common.persistence.dto.CtaTbUsuario;

public class ConsultasDaoImpl implements ConsultasDao {

	protected static final Logger logger = Logger
			.getLogger(ConsultasDaoImpl.class);

	private static final String SQL_FINDUSUARIOCLAVE = "SELECT ID, USUARIO, CLAVE, NOMBRES, APELLIDOS, EMAIL, P_TIPO_USUARIO, ESTADO FROM CTA_TB_USUARIO WHERE USUARIO=? AND CLAVE=? AND ESTADO='A'";
	
	@Override
	public CtaTbUsuario validaUsuarioClave(String usuario, String clave) {

		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		CtaTbUsuario result = null;

		try {
			// get the user-specified connection or get a connection from the
			// ResourceManager
			conn = ResourceManager.getConnection();

			Object[] param = new Object[2];
			param[0] = usuario;
			param[1] = clave;

			CtaTbUsuario[] res = DAOFactory.getCtaTbUsuarioDao()
					.findByDynamicSelect(SQL_FINDUSUARIOCLAVE, param);

			if (res.length > 0) {
				result = res[0];
			}

		} catch (Exception _e) {
			logger.error("Exception: " + _e.getMessage(), _e);
		} finally {
			ResourceManager.close(rs);
			ResourceManager.close(stmt);
			ResourceManager.close(conn);
		}
		return result;
	}

	private List<Map<String, String>> convertQuery(ResultSet rs)
			throws SQLException {

		List<Map<String, String>> filas = new ArrayList<Map<String, String>>();

		int count = rs.getMetaData().getColumnCount();
		filas = new ArrayList<Map<String, String>>();

		while (rs.next()) {

			Map<String, String> columnas = new HashMap<String, String>();
			for (int i = 1; i <= count; i++) {

				// Tambien se puede agregar el Column name (falta cachear
				// nombre)
				columnas.put(rs.getMetaData().getColumnName(i), rs.getString(i));
				// System.out.println("Columna [" + i + "]- Nombre ["+
				// rs.getMetaData().getColumnName(i) +"] - ["
				// + rs.getString(i) + "]");
			}

			filas.add(columnas);
			// System.out.println("---------------------------------------");
		}

		return filas;
	}

	
	private List<Map<String, String>> convertQueryLabel(ResultSet rs)
			throws SQLException {

		List<Map<String, String>> filas = new ArrayList<Map<String, String>>();

		int count = rs.getMetaData().getColumnCount();
		filas = new ArrayList<Map<String, String>>();

		while (rs.next()) {

			Map<String, String> columnas = new HashMap<String, String>();
			for (int i = 1; i <= count; i++) {

				// Tambien se puede agregar el Column name (falta cachear
				// nombre)
				columnas.put(rs.getMetaData().getColumnLabel(i), rs.getString(i));
				// System.out.println("Columna [" + i + "]- Nombre ["+
				// rs.getMetaData().getColumnName(i) +"] - ["
				// + rs.getString(i) + "]");
			}

			filas.add(columnas);
			// System.out.println("---------------------------------------");
		}

		return filas;
	}

	
	
	
    @Override
    public List<Map<String, String>> listadoClientesCola() {

		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		String sql = null;
		List<Map<String, String>> filas = null;
		Object[] params = new Object[15];
		int i = 1;
		
		boolean soloEmpresa=false;

		try {
			conn = ResourceManager.getConnection();

			sql = "SELECT COL.ID_INGRESO, CL.NOMBRE1, CL.NOMBRE2, CL.APELLIDO1, CL.APELLIDO2, CL.TIPO_DOC, CL.NUM_DOC, EC.DONDE_SUPO,EC.TIPO_VEHICULO FROM CTA_TB_CLIENTE CL, CTA_TB_COLA_CLIENTE COL, CTA_TB_ENCUESTA_CLIENTE EC, CTA_TB_INGRESO_CLIENTE ING WHERE CL.ID=COL.ID_CLIENTE AND EC.ID_INGRESO=ING.ID AND ING.ID=COL.ID_INGRESO ORDER BY COL.ID ASC ";

			stmt = conn.prepareStatement(sql);

			//PARAMS
			//for (int j = 1; j < i; j++) {
			//	stmt.setObject(j, params[j]);
			//}

			filas = this.convertQuery(stmt.executeQuery());
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ResourceManager.close(rs);
			ResourceManager.close(stmt);
			ResourceManager.close(conn);
		}

		return filas;

	}
	
    
    
    
    @Override
    public List<Map<String, String>> listadoProximoCliente() {

		Connection conn = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		String sql = null;
		List<Map<String, String>> filas = null;
		Object[] params = new Object[15];
		int i = 1;
		
		boolean soloEmpresa=false;

		try {
			conn = ResourceManager.getConnection();

			sql = "SELECT COL.ID_INGRESO, CL.NOMBRE1, CL.NOMBRE2, CL.APELLIDO1, CL.APELLIDO2, CL.TIPO_DOC, CL.NUM_DOC, EC.DONDE_SUPO,EC.TIPO_VEHICULO, COL.ID FROM CTA_TB_CLIENTE CL, CTA_TB_COLA_CLIENTE COL, CTA_TB_ENCUESTA_CLIENTE EC, CTA_TB_INGRESO_CLIENTE ING  WHERE CL.ID=COL.ID_CLIENTE AND EC.ID_INGRESO=ING.ID AND ING.ID=COL.ID_INGRESO AND COL.ESTADO='E'  ORDER BY COL.ID ASC LIMIT 1 ";

			stmt = conn.prepareStatement(sql);

			//PARAMS
			//for (int j = 1; j < i; j++) {
			//	stmt.setObject(j, params[j]);
			//}

			filas = this.convertQuery(stmt.executeQuery());
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ResourceManager.close(rs);
			ResourceManager.close(stmt);
			ResourceManager.close(conn);
		}

		return filas;

	}
}
